The Wage Tract — заповедник в округе Тома, Джорджия, США, деревья в котором не затронуты деятельностью человека со времён первых поселенцев. Для участка заповедника размером 200х200 м имеется информация о координатах сосен (sn — координата в направлении север-юг, we — в направлении запад-восток, обе от 0 до 200).
Проверим, можно ли пространственное распределение сосен считать равномерным, или они растут кластерами.
Загрузите данные, поделите участок на 5х5 одинаковых квадратов размера 40x40 м, посчитайте количество сосен в каждом квадрате (чтобы получить такой же результат, как у нас, используйте функцию scipy.stats.binned_statistic_2d).
Если сосны действительно растут равномерно, какое среднее ожидаемое количество сосен в каждом квадрате? В правильном ответе два знака после десятичной точки.
Чтобы сравнить распределение сосен с равномерным, посчитайте значение статистики хи-квадрат для полученных 5х5 квадратов. Округлите ответ до двух знаков после десятичной точки.
Насколько велико это значение? Если нулевая гипотеза справедлива, с какой вероятностью его можно было получить случайно?
Нулевое распределение статистики — хи-квадрат с 25−1=24 степенями свободы (поскольку у равномерного распределения, с которым мы сравниваем данные, нет ни одного оцениваемого по выборке параметра, число степеней свободы K−1, где K — количество интервалов).
Посчитайте достигаемый уровень значимости.
Если вы используете функцию scipy.stats.chi2.cdf, в качестве значения параметра df нужно взять 24 (это число степеней свободы); если функцию scipy.stats.chisquare — параметр ddof нужно брать равным 0 (это как раз количество параметров теоретического распределения, оцениваемых по выборке).
Отвергается ли гипотеза равномерности на уровне значимости 0.05?
In [1]:
import numpy as np
from scipy import stats
In [22]:
fin = open('pines.txt', 'r')
fin.readline()
xs = []
ys = []
for line in fin.readlines():
coords = line.strip().split()
xs.append(float(coords[0]))
ys.append(float(coords[1]))
stat = stats.binned_statistic_2d(xs, ys, None, statistic='count', bins=5, expand_binnumbers=True)
#len(stat.binnumber)
s = stat.statistic
In [21]:
len(xs)/25.0
Out[21]:
In [23]:
s
Out[23]:
In [25]:
s.ravel().mean()
Out[25]:
In [26]:
stats.chisquare(s.ravel())
Out[26]:
In [29]:
stats.chisquare(s.ravel(), ddof=24)
Out[29]:
In [ ]: